package com.zw.enumeration;

/**
 * 数据处理操作类型枚举
 * 用于定义对表中数值行的不同操作方式
 */
public enum OperationType {

    /**
     * 不操作 - 保留原始值
     * 适用于需要保持原样的数据列
     */
    KEEP(0, "不操作"),

    /**
     * 叠加操作 - 对子级值进行求和
     * 适用于需要累加计算的数值列
     */
    SUM(1, "叠加操作"),

    /**
     * 均值操作 - 对子级值求平均
     * 适用于需要计算平均值的数值列
     */
    AVERAGE(2, "均值操作");

    private final Integer code;
    private final String name;

    /**
     * 枚举构造函数
     *
     * @param code 操作代码（英文标识）
     * @param name 操作名称（中文描述）
     */
    OperationType(Integer code, String name) {
        this.code = code;
        this.name = name;
    }

    // Getter 方法
    public Integer getCode() {
        return code;
    }

    public String getName() {
        return name;
    }

    /**
     * 根据代码获取枚举实例
     *
     * @param code 操作代码
     * @return 对应的枚举实例，如果未找到返回null
     */
    public static OperationType getByCode(Integer code) {
        for (OperationType operation : values()) {
            if (operation.getCode().equals(code)) {
                return operation;
            }
        }
        return null;
    }

    /**
     * 根据名称获取枚举实例
     *
     * @param name 操作名称
     * @return 对应的枚举实例，如果未找到返回null
     */
    public static OperationType getByName(String name) {
        for (OperationType operation : values()) {
            if (operation.getName().equals(name)) {
                return operation;
            }
        }
        return null;
    }

    @Override
    public String toString() {
        return "DataOperation{" +
                "code='" + code + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}